package com.company.基础.Obj.exer;

/**
 * 编译完源程序以后，生成一个或多个字节码文件
 * 我们使用JVM中类的加载器和解释器对生成的字节码文件进行解释运行。意味着需要将字节码文件对应的类加载到内存中，涉及内存解析
 *
 * 我们将局部变量存储再栈结构中
 * 将new处来的结构（比如数组 对象）加载到堆空间中
 * 对象的属性（非static的）加载在堆空间中
 * 方法区：类的加载信息，常量池 静态域
 *
 *
 面试题：
方法的重载和重写的区别？
 *  重载叫overloading  方法名称相同，参数个数或类型不同， 返回值类型也可以不同  对权限没有要求  发生在一个类中
 *  重写叫overriding  方法名称，参数个数，返回值类型全部相同  被重写的方法不能拥有更严格的权限  发生在继承类中
 *
throws与throw的区别
 *  throw是语句抛出一个异常。
 *  throws是方法可能抛出异常的声明。(用在声明方法时，表示该方法可能要抛出异常)
 *
 String StringBuffer StringBuilder的区别
 *、String类是一个不可变类，即创建String对象后，该对象中的字符串是不可改变的，直到这个对象被销毁。
 * StringBuffer与StringBuilder都继承自AbstractStringBuilder类，
 * 在AbstractStringBuilder中也是使用字符数组保存字符串，是可变类
 *

 Collection与Collections的区别
 Collection是集合类的上级接口，继承与他有关的接口主要有List和Set
 Collections是针对集合类的一个帮助类，他提供一系列静态方法实现对各种集合的搜索、排序、线程安全等操作

 *  final与finally 与finalize的区别
 *
 * final：java中的关键字，修饰符。
 * A).如果一个类被声明为final，就意味着它不能再派生出新的子类，不能作为父类被继承。因此，一个类不能同时被声明为abstract抽象类的和final的类。
 * B).如果将变量或者方法声明为final，可以保证它们在使用中不被改变.
 * 　　1)被声明为final的变量必须在声明时给定初值，而在以后的引用中只能读取，不可修改。
 * 　　2)被声明final的方法只能使用，不能重载。
 * finally：java的一种异常处理机制。
 * 　　finally是对Java异常处理模型的最佳补充。
 *      finally结构使代码总会执行，而不管无异常发生。使用finally可以维护对象的内部状态，并可以清理非内存资源。
 *      特别是在关闭数据库连接这方面，如果程序员把数据库连接的close()方法放到finally中，就会大大降低程序出错的几率。
 *    finalize：Java中的一个方法名。
 *    Java技术使用finalize()方法在垃圾收集器将对象从内存中清除出去前，
 *    做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没被引用时对这个对象调用的。
 *    它是在Object类中定义的，因此所的类都继承了它。子类覆盖finalize()方法以整理系统资源或者执行其他清理工作。
 *    finalize()方法是在垃圾收集器删除对象之前对这个对象调用的。
 *
 *  抽象类与接口的区别
 *
 *  sleep（）/wait()的区别
 */
public class PersonTest {
    public static void main(String[] args) {
        Person p=new Person("jack","男",16);
        p.study();
        System.out.println(p.getName()+"今年"+p.addAge(16)+"岁了");



    }
}
